package com.qf.fmall2302.jwt;

import cn.hutool.core.codec.Base64;
import cn.hutool.jwt.JWT;

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.HashMap;

public class TestJwt {

    public static final String secretkey = "qfsyjava2302";

    public static void main(String[] args) throws UnsupportedEncodingException, InterruptedException {

//        String token = createToken();
        String token = "eyJoZWFkZXIwMSI6InRlc3QxMjMiLCJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJsdWZmeSIsImV4cCI6MTY5MzIxMjE0NiwiaWF0IjoxNjkzMjEwMzQ3LCJwaG9uZSI6IjEzODk5OTk4ODg4Iiwic2V4IjoxLCJhZ2UiOjE5fQ.84Bbi_pPlAS36G_Nuyb8-mZG5-J1_eMXwiuEdl7QczY\n";

//        Thread.sleep(3000);

        // 使用hutool工具类校验jwt
        boolean validate = JWT.of(token)  // 把token字符串传入，用来构建 jwt对象
                .setKey(secretkey.getBytes("utf-8")) // 掺入计算签名要使用的 密钥
                .validate(0l);  // 校验jwt是否合法 ，同时也校验时间参数，例如是否过期（参数0代表过期立即抛出异常，整数代表可以容忍的过期的秒数）
//        .verify(); // 仅仅校验签名是否正确，本质上就是重算签名，并且比较签名是否一致

        System.out.println(validate);

    }


    public static String createToken() throws UnsupportedEncodingException {
        // 利用hutool工具生成jwt
        HashMap<String, Object> payloadMap = new HashMap<>();
        payloadMap.put("age",19);
        payloadMap.put("sex",1);
        payloadMap.put("phone","13899998888");

        HashMap<String, Object> headerMap = new HashMap<>();
        headerMap.put("header01","test123");

        String token = JWT.create()
                .addHeaders(headerMap)  // 放入自定义jwt 头
                .setSubject("luffy")  // 在jwt的payload中放入 sub (代表用户身份信息)
                .setExpiresAt(new Date(System.currentTimeMillis()+1000*60*30)) // 该token 10秒之后过期
                .setIssuedAt(new Date())  // 在jwt的payload中放入 jwt的签发时间
                .addPayloads(payloadMap)  // 在jwt的payload中放入 其他自定义内容
                .setKey(secretkey.getBytes("utf-8"))   // 放入计算 jwt 需要的密钥字符串
                .sign();

        System.out.println(token);
        return token;
    }

    public static void test1(){
        // 测试下 base64 算法
//        String a = "伦家是一个非常长的字符串";
//        //5Lym5a625piv5LiA5Liq6Z2e5bi46ZW/55qE5a2X56ym5Liy
//        String encode = Base64.encode(a);
//        System.out.println(encode);

        // 还原为a
        String decodeStr = Base64.decodeStr("SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c");
        System.out.println(decodeStr);
    }

}
